//
//  Request.m
//  缘来
//
//  Created by ZhaoYan on 15/9/26.
//  Copyright (c) 2015年 缘来. All rights reserved.
//

#import "NetWork.h"
#import "AFNetworking.h"
#import <CommonCrypto/CommonDigest.h>
#include <sys/sysctl.h>
#import "RBKeyChain.h"
#import "AFAppDotNetAPIClient.h"

@implementation NetWork

//获取设备型号
+ (NSString *)getCurrentDeviceModel
{
    int mib[2];
    
    size_t len;
    
    char *machine;
    
    mib[0] =CTL_HW;
    
    mib[1] =HW_MACHINE;
    
    sysctl(mib,2,NULL, &len,NULL,0);
    
    machine =malloc(len);
    
    sysctl(mib,2, machine, &len,NULL,0);
    
    NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
    
    free(machine);
    
    if([platform isEqualToString:@"iPhone1,1"])return@"iPhone 2G (A1203)";
    
    if([platform isEqualToString:@"iPhone1,2"])return@"iPhone 3G (A1241/A1324)";
    
    if([platform isEqualToString:@"iPhone2,1"])return@"iPhone 3GS (A1303/A1325)";
    
    if([platform isEqualToString:@"iPhone3,1"])return@"iPhone 4 (A1332)";
    
    if([platform isEqualToString:@"iPhone3,2"])return@"iPhone 4 (A1332)";
    
    if([platform isEqualToString:@"iPhone3,3"])return@"iPhone 4 (A1349)";
    
    if([platform isEqualToString:@"iPhone4,1"])return@"iPhone 4S (A1387/A1431)";
    
    if([platform isEqualToString:@"iPhone5,1"])return@"iPhone 5 (A1428)";
    
    if([platform isEqualToString:@"iPhone5,2"])return@"iPhone 5 (A1429/A1442)";
    
    if([platform isEqualToString:@"iPhone5,3"])return@"iPhone 5c (A1456/A1532)";
    
    if([platform isEqualToString:@"iPhone5,4"])return@"iPhone 5c (A1507/A1516/A1526/A1529)";
    
    if([platform isEqualToString:@"iPhone6,1"])return@"iPhone 5s (A1453/A1533)";
    
    if([platform isEqualToString:@"iPhone6,2"])return@"iPhone 5s (A1457/A1518/A1528/A1530)";
    
    if([platform isEqualToString:@"iPhone7,1"])return@"iPhone 6 Plus (A1522/A1524)";
    
    if([platform isEqualToString:@"iPhone7,2"])return@"iPhone 6 (A1549/A1586)";
    
    if([platform isEqualToString:@"iPod1,1"])return@"iPod Touch 1G (A1213)";
    
    if([platform isEqualToString:@"iPod2,1"])return@"iPod Touch 2G (A1288)";
    
    if([platform isEqualToString:@"iPod3,1"])return@"iPod Touch 3G (A1318)";
    
    if([platform isEqualToString:@"iPod4,1"])return@"iPod Touch 4G (A1367)";
    
    if([platform isEqualToString:@"iPod5,1"])return@"iPod Touch 5G (A1421/A1509)";
    
    if([platform isEqualToString:@"iPad1,1"])return@"iPad 1G (A1219/A1337)";
    
    if([platform isEqualToString:@"iPad2,1"])return@"iPad 2 (A1395)";
    
    if([platform isEqualToString:@"iPad2,2"])return@"iPad 2 (A1396)";
    
    if([platform isEqualToString:@"iPad2,3"])return@"iPad 2 (A1397)";
    
    if([platform isEqualToString:@"iPad2,4"])return@"iPad 2 (A1395+New Chip)";
    
    if([platform isEqualToString:@"iPad2,5"])return@"iPad Mini 1G (A1432)";
    
    if([platform isEqualToString:@"iPad2,6"])return@"iPad Mini 1G (A1454)";
    
    if([platform isEqualToString:@"iPad2,7"])return@"iPad Mini 1G (A1455)";
    
    if([platform isEqualToString:@"iPad3,1"])return@"iPad 3 (A1416)";
    
    if([platform isEqualToString:@"iPad3,2"])return@"iPad 3 (A1403)";
    
    if([platform isEqualToString:@"iPad3,3"])return@"iPad 3 (A1430)";
    
    if([platform isEqualToString:@"iPad3,4"])return@"iPad 4 (A1458)";
    
    if([platform isEqualToString:@"iPad3,5"])return@"iPad 4 (A1459)";
    
    if([platform isEqualToString:@"iPad3,6"])return@"iPad 4 (A1460)";
    
    if([platform isEqualToString:@"iPad4,1"])return@"iPad Air (A1474)";
    
    if([platform isEqualToString:@"iPad4,2"])return@"iPad Air (A1475)";
    
    if([platform isEqualToString:@"iPad4,3"])return@"iPad Air (A1476)";
    
    if([platform isEqualToString:@"iPad4,4"])return@"iPad Mini 2G (A1489)";
    
    if([platform isEqualToString:@"iPad4,5"])return@"iPad Mini 2G (A1490)";
    
    if([platform isEqualToString:@"iPad4,6"])return@"iPad Mini 2G (A1491)";
    
    if([platform isEqualToString:@"i386"])return@"iPhone Simulator";
    
    if([platform isEqualToString:@"x86_64"])return@"iPhone Simulator";
    
    return platform;
}

//////////////////////////////////////////////////

+ (NSURLSessionDataTask *)requestWithURL:(NSString *)url params:(NSDictionary *)params httpMethod:(NSString *)httpMethod finishedBlock:(FinishedBlock)finishedBlock failureBlock:(FailureBlock)failureBlock
{
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    AFHTTPSessionManager *manager = [AFAppDotNetAPIClient sharedClient];
    
    //获取设备型号
    NSString *deviceModel = [NetWork getCurrentDeviceModel];
    //获取userId
    NSString *userId = @"";
   
    //获取APP版本
    NSString *appVer = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
    //获取devIMEI
    NSString *devIMEI = @"";
    if ([HEFANTV_DEVICETOKEN length] > 0)
    {
        devIMEI = HEFANTV_DEVICETOKEN;
    }
    else
    {
        devIMEI = @"";
    }
    //获取接口传回的设备唯一码
    NSString *deviceToken = @"";
    //获取系统版本
    NSString *sysVer = [[UIDevice currentDevice] systemVersion];
    
    NSMutableDictionary *buriedPoint = [NSMutableDictionary dictionary];
    [buriedPoint setObject:@"HF01" forKey:@"channelNo"];
    [buriedPoint setObject:@"ios" forKey:@"deviceType"];
    [buriedPoint setObject:deviceModel forKey:@"deviceModel"];
    [buriedPoint setObject:userId forKey:@"uid"];
    [buriedPoint setObject:appVer forKey:@"appVer"];
    [buriedPoint setObject:devIMEI forKey:@"devImei"];
    [buriedPoint setValue:deviceToken forKey:@"deviceToken"];
    [buriedPoint setObject:sysVer forKey:@"sysVersion"];
 
    //在请求头中添加token
    if ([HEFANTV_DEVICETOKEN length] > 0)
    {
        [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@_%@",[CBTLocalUserManager sharedInstance].userId,HEFANTV_DEVICETOKEN] forHTTPHeaderField:@"authorization"];
    }
    
    //在请求头中添加当前语言
    [manager.requestSerializer setValue:[self getAppLanguage] forHTTPHeaderField:@"language"];
    
    NSURLSessionDataTask *task = nil;
    
    NSMutableDictionary *encodeParams = [NSMutableDictionary dictionaryWithDictionary:params];
    if (params && [[params allKeys] containsObject:@"data"])
    {
        NSString *dataStr = [params objectForKey:@"data"];
        dataStr = [dataStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        [encodeParams setObject:dataStr forKey:@"data"];
    }
    else
    {
        encodeParams = nil;
    }
    
    //GET请求
    if ([[httpMethod uppercaseString] isEqualToString:@"GET"])
    {
        task = [manager GET:url parameters:params progress:nil
        success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            if (finishedBlock)
            {
                finishedBlock(task, responseObject);
            }
        }
        failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)task.response;
            if (urlResponse.statusCode == 403 || urlResponse.statusCode == 401) {
                [HFStatusView showFailureMessage:kLocalizedString(@"您的登录已失效，请重新登录!",nil)];
                [[NSUserDefaults standardUserDefaults]setObject:@"" forKey:HEFANTV_TOKEN];
                [[NSUserDefaults standardUserDefaults]synchronize];
                [[CBTLocalUserManager sharedInstance]removeUserInfo];
                [((AppDelegate*)[UIApplication sharedApplication].delegate) changeRootVC];
            }else{
                if (failureBlock)
                {
                    failureBlock(task, error);
                }
            }
         }];
    }
    //POST请求
    else if ([[httpMethod uppercaseString] isEqualToString:@"POST"])
    {
        //        [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        
        task = [manager POST:url parameters:params progress:nil
        success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            if (finishedBlock)
            {
                finishedBlock(task, responseObject);
            }
        }
        failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)task.response;
            if (urlResponse.statusCode == 403 || urlResponse.statusCode == 401) {
                [HFStatusView showFailureMessage:kLocalizedString(@"您的登录已失效，请重新登录!",nil)];
                [[NSUserDefaults standardUserDefaults]setObject:@"" forKey:HEFANTV_TOKEN];
                [[NSUserDefaults standardUserDefaults]synchronize];
                [[CBTLocalUserManager sharedInstance]removeUserInfo];
                [((AppDelegate*)[UIApplication sharedApplication].delegate) changeRootVC];
            }else{
                if (failureBlock)
                {
                    failureBlock(task, error);
                }
            }
        }];
    }
    
    return task;
}

+ (NSString *)getAppLanguage
{
    if ([kLanguageManager isSimplified]) {
        return @"language_zh";
    }else if ([kLanguageManager isTraditional]){
        return @"language_tw";
    }else if([kLanguageManager isKO]){
        return @"language_ko";
    }else{
        return @"language_en";
    }
}



@end










